Модульное
программирование в Mathcad
Общая идея модульного программирования состоит в следующем:
·
реализации
вычислительных процессов в виде отдельных программных единиц - модулей;
·
обращении к этим
модулям в других программах с передачей данных, необходимых для вычислительного
процесса.
Модульное программирование позволяет уменьшить объем
исходных текстов программ, сделать их более читаемыми, ускорить написание и
тестирование программ, уменьшить расходы на сопровождение (эксплуатацию) программ.
Модульное программирование в
пакете Mathcad можно реализовать
двумя методами :
·
модульное
программирование в пределах одного документа Mathcad;
·
модульное
программирование в нескольких документах Mathcad.
Модульное программирование в
одном документе
Этот метод характеризуется тем,
что:
·
для реализации
простых вычислений используются локальные функций, а более сложные - программы
- функции;
·
описание
локальных функций, программ-функций и их вызов (т.е. обращение к ним) находятся
в пределах одного документа и хранятся в одном файле. При этом часто внутри
одной программы-функции находится вызовы локальных функций, встроенных функций
Mathcad и другой программы-функции.
Пример. Реализуем в виде программы-функции вычисление определенного
интеграла вида
используя
формулу Симпсона с автоматическим выбором числа узлов. При этом
программа-функция Simpson(f,a,b,N) вычисляет
определенный интеграл по формуле Симпсона при фиксированном числе интервалов N, а программа-функция Adapt(f,a,b) выбирает по
заданной точности вычисления интеграла (равной 10-8 ) количество
интервалов.
Используя эти программы - функции вычислим определенный
интеграл от функции f(x) = x2 на отрезке [0,1]. Точное значение интеграла
равно 1/3=0.33333333333333... Обращение к программе-функции Adapt дает результат Перед
обращением к программе-функции Adapt необходимо описать функцию пользователя f(x) в виде f(x) : = x2, так
как имя функции f(x) используется в качестве фактического параметра. Модульное программирование в нескольких документах Mathcad В предыдущем способе реализации модульного программирования
описание модулей (функций пользователя и программ-функций) и их вызов находится
в одном документе. Такой способ имеет ряд недостатков: ·
невозможность параллельной разработки
программ несколькими разработчиками; ·
невозможность "автономной"
отладки программ-функций и их
модификации в процессе эксплуатации
программного обеспечения; ·
невозможность использования
разработанной программы-функции в нескольких документах без дублирования
описания программы-функции. Рис. Структура оператора Reference Оператор Reference вставляется в текст документа, в котором вызывается
программа-функция перед ее вызовом. Для вставки этого оператора необходимо
выполнить следующие шаги: Шаг 1. Щелкнуть левой кнопкой мыши в том месте, куда будет вставлен
оператор Reference. Шаг 2. Обратиться к пункту
меню Insert и
выполнить команду Reference. Шаг 3. В поле ввода
появившегося диалогового окна ввести полное имя файла, содержащего документ с
описанием вызываемой функции. Для задания имени можно щелкнуть кнопку Browse и
в появившемся диалоговом окне указать диск, папку и имя файла ( в поле ввода
отразится полное имя файла). Шаг 4. После выполненных установок щелкнуть
кнопку OK После выполнения этих шагов в
документе появится оператор Reference. Таким образом реализация
модульного программирования в нескольких документах МаthCAD включает следующие этапы (которые будем
иллюстрировать на примере вычисления определенного интеграла с использованием
программ-функций примера) : ·
Описание в
документе МаthCAD необходимых программ-функций
и сохранение этого документа в файле в нужной папке и под нужном именем (в нашем
примере документ будет включать описание двух программ-функций Simpson и Adapt и документ
будет сохранен на диске D: в папке MathCad_Apll в файле под
именем Adapt_Integration.mcd). ·
Вставка оператора
Reference в документе, в котором вызываются описанные
программ-функций путем выполнения шагов 1 - 4. В нашем примере вставленный
оператор Reference будет иметь вид: ·
Вызов нужных
программ-функций. В нашем примере вызов может сметь следующий вид: В заключении заметим, что
описанная реализация модульного программирования позволяет создавать библиотеки
программ-функций, реализующие вычислительные алгоритмы различной сложности для
различных предметных областей и использовать библиотеки программы-функции,
разработанные другими пользователями. Рекурсивные
вычисления. Рекурсия является одним
из мощных способов программирования и заключается в определение функции через саму себя. Рекурсивное
определение функции должно состоять из двух частей: начального определения и определения
функции в терминах предыдущего значения функции. Эти два этапа хорошо
иллюстрируются на примере вычисления факториала целого числа в следующем
фрагменте: Задания: 1. Даны натуральные числа n, m, целые числа a1,...,an, b1,...,bm,c1,...,c30.
Получить 2. Дано действительное положительное число x1=2-0.06x2+0.02x3 , x2=3-0.03x1+0.05x3 , x3=5-0.01x1+0.02x2 ; 3. Дано действительное положительное число y=sinx2+2,
y=ex Воспользоваться
численными методами решения уравнений и интегрирования. 4. Даны целые числа a1,…,an. Для
каждого из чисел, входящих в последовательность a1,…,an,
выяснить, сколько раз оно входит в эту последовательность. Результат
представить в виде ряда строк, первая из которых есть a—k, где k—число
вхождений a1 последовательность a1,…,an.
Вторая строка будет иметь вид ai—ki, где ai—первый
по порядку член последовательности, отличный от a1, а ki—число
вхождений этого члена в последовательность. 5. Даны натуральное число n, целые числа a1, ... a25, b1,...bn. Среди a1, ..., a25
нет повторяющихся чисел, нет их и среди b1,..,bn. Верно
ли, что все члены последовательности a1,…,a25 входят в
последовательность b1,…,bn и при
этом a1 встречается в последовательности b1,…,bn
не позднее, чем a2, a2—не позднее, чем a3, и
т. д.? 6. Последовательность чисел Фибоначчи u0, u1, u2,.. образуется по закону u0=0;
u1=l; ui=ui-1+ui-2 (i=2,3, ...). Последовательность f0, f1, ...
образуется по закону f0=0; f1=1; fi=fi-1+fi-2+ui-2 (i=2,3, ..
). Дано натуральное n > 1. Получить f0, f1,
..
, fn.
Для
преодоления этих недостатков описание
программы-функции выполняют в одном документе MathCAD, а ее вызов
размещается в другом документе (этот прием широко используется в современных
алгоритмических языках высокого уровня). Однако при этом возникает вопрос: как
при вызове программы-функции в одном документе "присоединить" файл с
другим документом MathCAD, в котором находится
описание вызываемой программы-функции? Для такого присоединения служит специальный
оператор Reference, который записывается в виде, показанном на рис.
![]()

![]()

![]()

. Методом итераций решить систему линейных алгебраических
уравнений с точностью
. В данной задаче вычисление с точностью
означает следующее.
Вычисляется последовательность векторов приближений x(m)=(x1(m),x2(m),…,xn(m)),
где n—число неизвестных системы, m=0,1,2,... Если для некоторого k выполнено
условие
, i=1, 2, ...,
n, то вектор x(k) – решение системы уравнений.
. Вычислить с точностью
площадь фигуры между
дугами двух кривых:
;